#!/bin/bash

# JAVA_HOME
usage="Usage: run.sh (start|stop|status|restart)"
action=$1
app_home_dir=$2


#-z 判断字符串长度是否为0，true则为0
#判断变量$action是否为
if [ -z "$action" ];then
 echo $usage
#exit 1；非正常退出
#exit 0；正常退出
 exit 1
fi

#应用名称
APP_NAME="paradise-main"
APP_VERSION="1.0"

# 应用路径
APP_HOME=$app_home_dir
echo $APP_HOME
if [ -z "$APP_HOME" ];
#dirname $0 在脚本中有用，
#如果$0是目录，定位到当前目录的上级目录
#如果$0是文件，则定位到当前目录 
   cd `dirname $0`/../
   then APP_HOME=`pwd`
fi
echo "APP_HOME:$APP_HOME"

#日志路径
LOG_DIR="$APP_HOME/logs"
echo "日志路径为：$LOG_DIR"
#加载配置文件
CMD_CONF="-Dspring.config.location=$APP_HOME/conf/"
CMD_LIB="-Djava.ext.dirs=$APP_HOME/lib/"


# jar包
JAR_FILE=`ls $APP_HOME|grep paradise-main-$APP_VERSION.jar`
echo "jar包为：$JAR_FILE"

# 创建日志文件夹
if [ ! -d "$LOG_DIR" ];then
    mkdir $LOG_DIR
    echo "创建日志文件：$LOG_DIR"
fi

PID_FILE="$APP_HOME/$APP_NAME.pid"
echo "获得的PID_FILE：$PID_FILE"
pid=0

checkPid(){
    pid=`cat $PID_FILE 2>/dev/null`
    if [[ -z "$pid" || "$pid" -eq 0 ]];then
#grep -v grep 表示去掉含有grep的进程
#|awk '{print $2}' 表示以空格为分隔符，获取第二个变量
       pid=`ps -ef|grep $APP_DIR/$JAR_FILE |grep -v grep |awk '{print $2}'`
    fi
#判断字符串长度是否为0，不为0返回true
#与 -z 相反
    if [ -n "$pid" ]; then
#kill -0 判断是否可以杀死进程
#如果没有权限杀死进程，则会报错
        if (kill -0 $pid >/dev/null 2>&1);then
              echo "check pid:$pid"
        else
              pid=0
        fi
    else
        pid=0
    fi
}
start(){
   echo "进入start()方法"
   rm -f $LOG_DIR/paradise/paradise_stderr.log
#mkdir -p 递归创建目录
   mkdir -p $LOG_DIR
   echo '' >> $LOG_DIR/paradise/paradise_stdout.log >/dev/null
   CMD="java -jar $CMD_CONF $CMD_LIB $APP_HOME/$JAR_FILE"
   echo $CMD
   checkPid
   if [ "$pid" -eq 0 ];then
        #$CMD
        echo "启动jar:$CMD"
        nohup $CMD >/dev/null 2>$LOG_DIR/start.log &
#$! 后台运行的最后一个进程ID号
        echo $! > $PID_FILE
        pid=`cat "$PID_FILE" 2>/dev/null`
        sleep 1
        #tail -f $APP_HOME/logs/sjzj_stdout.log
   else
     echo "$APP_NAME 正在运行...pid:$pid"
   fi
}

stop(){
 checkPid
  if [ "$pid" -eq 0 ];then
    echo "$APP_NAME 没有运行"
  else
    echo "$APP_NAME stop..."
    kill -9 $pid
    rm -f $PID_FILE
  fi
  sleep 1
}

status(){
 checkPid
  if [ "$pid" -eq 0 ];then
    echo "$APP_NAME 没有运行"
  else
    echo "$APP_NAME 运行中，pid:$pid"
  fi
  sleep 1
}

restart(){
 stop
 sleep 1s
 start
 exit 0
}


#判断传入的参数类型，执行不同的方法
case $action in
   start) start;;
   stop) stop;;
   status) status;;
   restart) restart;;
   *) echo $usage;;
esac

